#include<iostream>
#include<unistd.h>
#include<sys/types.h>
#include<sys/stat.h>
#include<fcntl.h>
#include<sys/wait.h>

using namespace std;

int main()
{
    if(-1==mkfifo("corres.txt",0644))
    {
        perror("mkfifo");
        exit(-1);
    }
    pid_t pid1 =fork();
    pid_t pid2=-1;
    if(pid1>0)
    {
        pid2 =fork();
        if(pid1<0||pid2<0)
        {
            perror("fork()");
            exit(-1);
        }
    }

    if(0==pid1)
    {
        char buf[]="i am process A";
        int fd=open("corres.txt",O_WRONLY);
        if(-1==fd)
        {
            perror("open");
            exit(-1);
        }
        write(fd,buf,sizeof(buf));

        return 0;
    }
    if(0==pid2)
    {
        char buf[30];
        int fd=open("corres.txt",O_RDONLY);
        if(-1==fd)
        {
            perror("open");
            exit(-1);
        }
        read(fd,buf,sizeof(buf));
        printf("%s\n",buf);

        return 0;
    }

    waitpid(pid1,NULL,0);
    waitpid(pid2,NULL,0);
    unlink("corres.txt");
    return 0;
}